import { ref, reactive, computed, watch, onBeforeUnmount } from "vue";
import { ElMessage } from "element-plus";
import { emitter } from "@/utils/mitt";
export function usescreen(props) {
  const DZData = [
    { "id": "1", "text": "最后一次交易日期与上一次交易日期时间间隔" },
    { "id": "2", "text": "是否有协议转让" },
    { "id": "3", "text": "是否有期权行权复杂的股权交易" },
    { "id": "4", "text": "与境外企业之间的交易次数" },
    { "id": "5", "text": "具有大额异常结构或退货的销售业务次数" },
    { "id": "6", "text": "循环交易次数" },
    { "id": "7", "text": "在合同期限届满之前变更条款的交易次数" },
    { "id": "8", "text": "采用特殊交易模式或创新交易模式次数" },
    { "id": "9", "text": "交易标的对被审计单位或交易对手而言不具有合理用途次数" },
    { "id": "10", "text": "交易价格明显偏离正常市场价格次数" },
    { "id": "11", "text": "非金额重大的衍生金融工具交易次数" },
  ]
  const MZData = [
    { "id": "3", "text": "性别" },
    { "id": "4", "text": "年龄" },
    { "id": "5", "text": "民族" },
    { "id": "6", "text": "婚姻状况" },
    { "id": "7", "text": "省份" },
    { "id": "8", "text": "文化程度" },
    { "id": "9", "text": "单位性质" },
    { "id": "10", "text": "年收入" },
    // { "id": "12", "text": "逾期次数" },
    { "id": "13", "text": "职称" },
    { "id": "14", "text": "身体状况" },
    { "id": "15", "text": "月收入" },
    // { "id": "16", "text": "担保方式" },
    // { "id": "17", "text": "分期付款占月收入的比重" },
    // { "id": "18", "text": "实际贷款年限" }
  ]
  const TJData = [{ id: "1", text: ">" }, { id: "2", text: "=" }, { id: "3", text: "<" }, { id: "4", text: ">=" }, { id: "5", text: "<=" }, { id: "6", text: "≠" }]
  const BHData = [{ id: "1", text: "包含" }, { id: "2", text: "不包含" }]
  const CZData = [{ id: "1", text: "添加企业高管属性" }, { id: "2", text: "添加企业高管交易属性" }]
  const selData = {
    sexArr: [{ "id": "1", "text": "男" }, { "id": "2", "text": "女" }],
    provice: [{ "id": "1", "text": "北京市" }, { "id": "2", "text": "天津市" }, { "id": "3", "text": "上海市" }, { "id": "4", "text": "重庆市" }, { "id": "5", "text": "河北省" }, { "id": "6", "text": "山西省" }, { "id": "7", "text": "辽宁省" }, { "id": "8", "text": "吉林省" }, { "id": "9", "text": "黑龙江省" }, { "id": "10", "text": "江苏省" }, { "id": "11", "text": "浙江省" }, { "id": "12", "text": "安徽省" }, { "id": "13", "text": "福建省" }, { "id": "14", "text": "江西省" }, { "id": "15", "text": "山东省" }, { "id": "16", "text": "河南省" }, { "id": "17", "text": "湖北省" }, { "id": "18", "text": "湖南省" }, { "id": "19", "text": "广东省" }, { "id": "20", "text": "海南省" }, { "id": "21", "text": "四川省" }, { "id": "22", "text": "贵州省" }, { "id": "23", "text": "云南省" }, { "id": "24", "text": "陕西省" }, { "id": "25", "text": "甘肃省" }, { "id": "26", "text": "青海省" }, { "id": "27", "text": "台湾省" }, { "id": "28", "text": "内蒙古自治区" }, { "id": "29", "text": "广西壮族自治区" }, { "id": "30", "text": "西藏自治区" }, { "id": "31", "text": "宁夏回族自治区" }, { "id": "32", "text": "新疆维吾尔自治区" }],
    fame: [{ "id": "1", "text": "汉族" }, { "id": "2", "text": "蒙古族" }, { "id": "3", "text": "回族" }, { "id": "4", "text": "藏族" }, { "id": "5", "text": "维吾尔族" }, { "id": "6", "text": "苗族" }, { "id": "7", "text": "彝族" }, { "id": "8", "text": "壮族" }, { "id": "9", "text": "布依族" }, { "id": "10", "text": "朝鲜族" }, { "id": "11", "text": "满族" }, { "id": "12", "text": "侗族" }, { "id": "13", "text": "瑶族" }, { "id": "14", "text": "白族" }, { "id": "15", "text": "土家族" }, { "id": "16", "text": "哈尼族" }, { "id": "17", "text": "哈萨克族" }, { "id": "18", "text": "傣族" }, { "id": "19", "text": "黎族" }, { "id": "20", "text": "僳僳族" }, { "id": "21", "text": "佤族" }, { "id": "22", "text": "畲族" }, { "id": "23", "text": "高山族" }, { "id": "24", "text": "拉祜族" }, { "id": "25", "text": "水族" }, { "id": "26", "text": "东乡族" }, { "id": "27", "text": "纳西族" }, { "id": "28", "text": "景颇族" }, { "id": "29", "text": "柯尔克孜族" }, { "id": "30", "text": "土族" }, { "id": "31", "text": "达斡尔族" }, { "id": "32", "text": "仫佬族" }, { "id": "33", "text": "羌族" }, { "id": "34", "text": "布朗族" }, { "id": "35", "text": "撒拉族" }, { "id": "36", "text": "毛南族" }, { "id": "37", "text": "仡佬族" }, { "id": "38", "text": "锡伯族" }, { "id": "39", "text": "阿昌族" }, { "id": "40", "text": "普米族" }, { "id": "41", "text": "塔吉克族" }, { "id": "42", "text": "怒族" }, { "id": "43", "text": "乌孜别克族" }, { "id": "44", "text": "俄罗斯族" }, { "id": "45", "text": "鄂温克族" }, { "id": "46", "text": "德昂族" }, { "id": "47", "text": "保安族" }, { "id": "48", "text": "裕固族" }, { "id": "49", "text": "京族" }, { "id": "50", "text": "塔塔尔族" }, { "id": "51", "text": "独龙族" }, { "id": "52", "text": "鄂伦春族" }, { "id": "53", "text": "赫哲族" }, { "id": "54", "text": "门巴族" }, { "id": "55", "text": "珞巴族" }, { "id": "56", "text": "基诺族" }],
    marry: [{ "id": "1", "text": "未婚" }, { "id": "2", "text": "已婚有子女" }, { "id": "3", "text": "已婚无子女" }],
    study: [{ "id": "1", "text": "初等教育" }, { "id": "2", "text": "中等教育" }, { "id": "3", "text": "高等教育" }],
    careers: [{ "id": "1", "text": "国家机关、党群组织、企业、事业单位负责人" }, { "id": "2", "text": "专业技术人员" }, { "id": "3", "text": "办事人员和有关人员" }, { "id": "4", "text": "商业、服务业人员" }, { "id": "5", "text": "农、林、牧、渔、水利业生产人员" }, { "id": "6", "text": "生产、运输设备操作人员及有关人员" }, { "id": "7", "text": "不便分类的其他从业人员" }],
    dwxz: [{ "id": "1", "text": "国家机关" }, { "id": "2", "text": "企业单位" }, { "id": "3", "text": "个体" }, { "id": "4", "text": "其他" }, { "id": "5", "text": "无" }],
    risk: [{ "id": "1", "text": "保守型（C1）" }, { "id": "2", "text": "谨慎型（C2）" }, { "id": "3", "text": "稳健型（C3）" }, { "id": "4", "text": "积极型（C4）" }, { "id": "5", "text": "激进型（C5）" }],
    jobname: [{ "id": "1", "text": "初级职称" }, { "id": "2", "text": "中级职称" }, { "id": "3", "text": "高级职称" }],
    bodystate: [{ "id": "1", "text": "差" }, { "id": "2", "text": "一般" }, { "id": "3", "text": "良好" }],
    warranty: [{ id: "1", text: "有担保" }, { id: "2", text: "无担保" }],
  }
  const selData2 = {
    jydy: [{ "id": "1", "text": "1-6个月" }, { "id": "2", "text": "7-12个月" }],
    yesorno: [{ "id": "1", "text": "是" }, { "id": "2", "text": "否" }],
    khd: [{ "id": "1", "text": "0-5次" }, { "id": "2", "text": "5-10次" }, { "id": "3", "text": "10-20次" }, { "id": "4", "text": "20次以上" }],

  }
  const mType = [{ "id": "1", "text": "文本框" }, { "id": "2", "text": "大于、小于、等于" }, { "id": "3", "text": "包含、不包含" }]
  const endData = ref([])
  const states = ref("0");

  //活跃次数select下拉选择
  function selectFn(e, b, d) {
    // console.log(e.target.selectedIndex) // 选择项的index索引
    // console.log(e.target.value) // 选择项的value
    let val = e;
    let typ = 1;
    let name = '';
    if (val == 1 || val == 2) {
      typ = 1
    } else if (val == 3) {
      typ = 3;
      name = "sexArr"
    } else if (val == 4) {
      typ = 2
    } else if (val == 5) {
      typ = 3
      name = "fame";
    } else if (val == 6) {
      typ = 3
      name = "marry";
    } else if (val == 7) {
      typ = 3
      name = "provice";
    } else if (val == 8) {
      typ = 3
      name = "study";
    } else if (val == 9) {
      typ = 3
      name = "dwxz";
    } else if (val == 10) {
      typ = 2

    } else if (val == 11) {
      typ = 3
      name = "risk"
    } else if (val == 12) {
      typ = 2

    } else if (val == 13) {
      typ = 3
      name = "jobname"
    } else if (val == 14) {
      typ = 3
      name = "bodystate"
    } else if (val == 15) {
      typ = 2
    } else if (val == 16) {
      typ = 3
      name = "warranty"
    } else if (val == 17) {
      typ = 2
    } else if (val == 18) {
      typ = 2
    } else {
      typ = ''
    }
    endData.value[b].data[d].rather = '';
    endData.value[b].data[d].times = '';
    endData.value[b].data[d].rather2 = '';
    endData.value[b].data[d].times2 = '';
    endData.value[b].data[d].selectMore = '';
    endData.value[b].data[d].mType = typ;
    endData.value[b].data[d].mName = name;
  }

  function selectFnA(e, b, d) {
    let val = e;
    let typ = 1;
    let name = '';
    if (val == '2' || val == '3') {
      typ = 3;
      name = 'yesorno'
    } else {
      typ = 2;
    }
    endData.value[b].data[d].rather = '';
    endData.value[b].data[d].times = '';
    endData.value[b].data[d].rather2 = '';
    endData.value[b].data[d].times2 = '';
    endData.value[b].data[d].selectMore = '';
    endData.value[b].data[d].mType = typ;
    endData.value[b].data[d].mName = name;
  }
  function selectShow(e, b, d) {
    let isSelect = endData.value[b].data[d].isSelect;
    endData.value[b].data[d].isSelect = !isSelect
  }
  function selectFn2(e, b, d) {
    endData.value[b].data[d].selectMore = '';
    let selectd = endData.value[b].data[d].times;
    selectd.forEach((item, i) => {
      let dun = "";
      if (i) {
        dun = " | "
      }
      endData.value[b].data[d].selectMore += dun + e.target[item].innerText
      endData.value[b].data[d].mVal += dun + e.target[item].value
    })
    return false;
  }

  // type  点击按钮类型   { id: "1", text: "做过" }, { id: "2", text: "新增于" }, { id: "3", text: "活跃次数" }, { id: "4", text: "用户属性满足" }
  // id  并且对应的下标
  // ids 并且下面子类，或者对应的按钮
  function addItem(type, id, ids) {
    // console.log('type :>> ', type);
    // console.log(id);
    // console.log('ids :>> ', ids);
    verifyNum();
    let obj = { type: type, term: '', rather: '', times: '', rather2: '', times2: '', selectMore: '', isSelect: '', mType: '', mName: '', mVal: '', daily: '' };

    if (type == 3) {
      if (selectArrs.arr3.length >= 6) {
        return false;
      }
    }
    // 如果是非子类按钮点击时
    if (!ids && ids != 0) {
      id = id + 1;
    }

    if (endData.value[id]) {   //判断当前数组是否存在
      endData.value[id].data.push(obj)
    } else {
      endData.value.push({
        data: [obj]
      })
    }
  }
  /**
   * 移除
   * @param {number | string} id 当前点击数组对应的项的下标
   * @param {number | string} ids 当前点击数组对应的项子类那一项的下标
   */
  function removeItem(id, ids) {
    // console.log('id :>> ', id);
    // console.log('ids :>> ', ids);
    if (endData.value[id].data.length == 1) {  //如果是最后一条直接删除当前数组那一项
      endData.value.splice(id, 1);    //删除对应数据
    } else {
      //删除数组子类下的项
      endData.value[id].data.splice(ids, 1);    //删除对应数据
    }
    if (endData.value.length == 0) {
      endData.value = [];
      // if (typeof grid != "undefined") {
      //   grid.setUrl('../Data/JGDSJData.aspx?App=LoadFR');
      //   grid.load({ DATA: "" });
      //   states = "0";
      // }
    }
  }
  //点击确定的事件
  emitter.on("setChoose", () => { setChoose() })
  function setChoose() {
    verifyNum();
    let arr = [];
    let isstate: number;
    const objData = JSON.parse(JSON.stringify(endData.value));
    objData.forEach((item, index) => {
      let index2 = index + 1;
      item.data.forEach((a, i) => {
        isstate = 1;
        let i2 = '';
        if (i) i2 = i
        isstate = VerifyContent(a)
        a["times"] = a["times"].toString();
        a["id"] = index2 + '' + i2;
        a.selectMore = a.selectMore == '' ? "" : a.selectMore.join(' | ')
        arr.push(a);
      });
    });
    let strArr = JSON.stringify(arr);
    if (strArr == "[]" || !isstate) {
      ElMessage.warning("请设置筛选条件!");
      return;
    }
    emitter.emit("StubimData", arr)
    states.value = "1";
  }

  function VerifyContent(a) {
    let isstate = 1;
    if (a.mType == '' && a.mName == '') isstate = 0;
    if (a.mType == 2 && a.mName == 'jypl') {
      if (a.daily === "") isstate = 0;
      if (a.rather === "") isstate = 0;
      if (a.times === "") isstate = 0;
    }

    if (a.mType == 2 && a.mName != 'jypl') {
      if (a.rather === "") isstate = 0;
      if (a.times === "") isstate = 0;
    }
    if (a.mType == 3) {
      if (a.rather === "") isstate = 0;
      if (a.selectMore === "" || a.selectMore?.length === 0) isstate = 0;
    }
    return isstate
  }
  //清空选中的数据
  emitter.on("clearChooses", () => { clearChoose() });
  function clearChoose() {
    if (states.value == "1") {
      endData.value = [];
    }
    else {
      endData.value = [];
    }
    states.value = "0";
    emitter.emit("clearChoose")
  }
  function verifyNum() {
    endData.value.forEach((item, index) => {
      // item.data.forEach((a, i) => {
      //   if (a.times === 0) {

      //     a.times = 0;
      //   } else if (a.times == "") {

      //     a.times = "";
      //   } else {
      //     a.times = Number(a.times) ? Number(a.times) : 0;
      //   }

      //   if (a.times2 === 0) {
      //     a.times2 = 0;
      //   } else if (a.times2 == "") {
      //     a.times2 = "";
      //   } else {
      //     a.times2 = Number(a.times2) ? Number(a.times2) : 0;
      //   }
      // });
      item.data.forEach((a, i) => {
        if (Number(a.times)) {
          a.times = Number(a.times);
        } else {
          a.times = "0";
        }
        if (Number(a.times2)) {
          a.times2 = Number(a.times2);
        } else {
          a.times2 = "";
        }
      });
    });
  }
  /**
   * 输入框对输入数字的处理
   * @param {obj} event js事件对象
   * @param {string|number} b 一级数组子类下标
   * @param {string|number} d 一级子类下的子类（二级下标）
   * @param {string} name 需要更改的字段name名
   * @param {string|number} type 需要处理的类型，type=1 正数和小数，type=2 正整数，type为空或其他 数字（包含小数、负数）
   * @param {number} max 输入框允许输入的最大值，这里默认是180
   * @returns
   */

  function changeNum(event, b, d, name, type, max = 180) {
    //响应鼠标事件，允许左右方向键移动
    event = window.event || event;
    if (event.keyCode == 37 | event.keyCode == 39) {
      return;
    }
    let val = event.target.value;
    let t = val.charAt(0);
    let t2 = val.charAt(1);
    if (type == 2) {
      val = val.replace(/^\.|[^\d]+/g, ''); //非正整数都替换为空
      if (Number(val) > max) {
        val = max;
      }
    } else {
      //先把非数字的都替换掉，除了数字和.
      val = val.replace(/[^\d.]/g, "");
      //必须保证第一个为数字而不是.
      val = val.replace(/^\./g, "");
      //保证只有出现一个.而没有多个.
      val = val.replace(/\.{2,}/g, ".");
      //保证.只出现一次，而不能出现两次以上
      val = val.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
      console.log(val);

      if (t == 0 && t2 == 0) {
        val = 0;
      }
      if (val.toString().length > 10) {
        val = Number(val).toFixed(8)
      }
      if (Number(val) > max) {
        val = max;
      }
      if (type == 1) {

      } else {
        //如果第一位是负号，则允许添加   如果不允许添加负号 可以把这块注释掉
        if (t == '-') {
          val = '-' + val;
        }
      }

    }
    let linReg = /^[0]+$/gi;    //全部都为0
    let ax = endData.value[b].data[d]
    if (linReg.test(val)) {
      ax[name] = 0
    } else {
      ax[name] = val
    }
  }

  function clearNoNum(obj) {
    if (!(/[^0]/gi.test(obj.value))) {
      return obj.value = 0;
    }
  }

  const selectArrs = computed(() => {
    let arr1 = [], arr2 = [], arr3 = [], arr4 = [];
    return { arr1, arr2, arr3, arr4 };
  })

  function ViewSecurities(row) {
    let endArry = [];
    row.forEach((item, index) => {
      let strId = item.id + "";
      let ids = strId.slice(0, 1) - 1;
      let times = item.times;
      if (times.indexOf(",") != -1) {
        times = times.split(",");
      }
      const obj = {
        'daily': item.daily,
        'id': item.id,
        "type": item.type,
        "term": item.term,
        "rather": item.rather,
        "times": times,
        "rather2": item.rather2,
        "times2": item.times2,
        "selectMore": item.selectMore,
        "isSelect": false,
        "mType": item.mType,
        "mName": item.mName,
        "mVal": item.mVal,
      };
      if (endArry[ids]) {
        endArry[ids].data.push(obj)
      } else {
        endArry.push({
          data: [obj]
        })
      }
    });
    endData.value = endArry
  }

  watch(props, newval => {
    if (newval.rowdata) {
      ViewSecurities(newval.rowdata)
    } else {
      ViewSecurities([])
    }
  }, { immediate: true, deep: true })

  onBeforeUnmount(() => {
    emitter.off("setChoose");
    emitter.off("StubimData")
    emitter.off("clearChooses");
  })

  return {
    DZData,
    MZData,
    TJData,
    BHData,
    CZData,
    selData,
    selData2,
    states,
    endData,
    mType,
    selectArrs,
    selectFn,
    selectFn2,
    selectFnA,
    selectShow,
    addItem,
    removeItem,
    setChoose,
    clearNoNum,
    clearChoose,
    changeNum
  }
}
